Шаг 8 - Удаление имени NetBios

Загрузить проект
Зачем удалять имя NetBios, естественно для того, чтобы запретить обращаться по этому имени. А это может быть использовано для специфических операций, когда работа с программой нежелательна. То есть программа работает, но используя NetBios к ней не обратишься. Удаление имени NetBios производится командой NCBDELNAME. При этом нужно указать только NetBios имя программы, которая обращается и вызвать команду. Вот так это должно выглядеть.
	NCB ncb;
	int i;
	memset (&ncb, 0, sizeof (ncb));
	i_strlen = strlen(LOCALNAME);
	if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ;
	memset (ncb.nbc_name, ' ', NCBNAMSZ);
	memcpy (ncb.nbc_name, LOCALNAME, i_strlen);
	ncb.ncb_command=NCBDELNAME;
	uRetCode = Netbios((NCB*) &ncb );
В код проекта я внес некоторые изменения. Ну во-первых, сделал глобальной переменную NCB. В этом нет ничего плохого, всё равно memset её обнуляет. И это обязательно надо делать.
.......
NCB ncb;
.......
Во-вторых, объявил глобальную переменную uRetCode
UCHAR uRetCode; 
Теперь я могу создать функцию, которая будет тестировать возврат и не делать это каждый раз при вызове команд.
void TestNetBiosOperation()
{
	if ( uRetCode != 0 )  
	{
		cout << "error  " << endl;
		exit(1);
	}
}
Так как NCB глобальная можно создать функцию, которая будет вызывать команду NetBios и сразу тестировать результат.
void RunNetBiosCommand(UCHAR  ncb_command)
{
	ncb.ncb_command=ncb_command;
	uRetCode = Netbios((NCB*) &ncb );
	TestNetBiosOperation();
}
Так же я написал обещанную функцию GenerateNetBiosName.
void GenerateNetBiosName(unsigned char* chNetBiosName)
{
	int i_strlen;
	i_strlen = strlen(LOCALNAME);
	if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ;
	memset (chNetBiosName, ' ', NCBNAMSZ);
	memcpy (chNetBiosName, LOCALNAME, i_strlen);
}
И процедура удаления имеет теперь вид.
void DeleteNetBiosName()
{
	memset (&ncb, 0, sizeof (ncb));
	GenerateNetBiosName(ncb.ncb_name);
   	RunNetBiosCommand(NCBDELNAME);
}
А добавления
void AddNetBiosName()
{
	memset(&ncb, 0, sizeof (ncb));
	GenerateNetBiosName(ncb.ncb_name);
	ncb.ncb_lana_num = LANANUM;
	RunNetBiosCommand(NCBADDNAME);
}
Всё можете посмотреть загрузив проект. Но код намного читабельнее. Общий вид программы Вот
void main()
{
	ResetNetBios();
	AddNetBiosName();
	ViewNetBiosName();
	DeleteNetBiosName();
	cout << "Canсel" << endl;
	getch();
}
Теперь нужно всё проверить. Скомпилируйте и запустите эту программу, потом не прекращая её запустите из предыдущего примера. У Вас должно быть примерно так.

8_1.gif (5405 b)

Как видите в отличии от предыдущего примера несмотря на то, что программа не закончила работу её имени уже нет.

Hosted by uCoz